home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume2 / xtools / patch1 next >
Encoding:
Internet Message Format  |  1993-04-28  |  32.5 KB

  1. From: mikew@wyse.wyse.com (Mike Wexler)
  2. Newsgroups: comp.sources.x
  3. Subject: v02i004:  update to xtools, Patch1
  4. Message-ID: <1794@wyse.wyse.com>
  5. Date: 18 Oct 88 22:47:25 GMT
  6. Approved: mikew@wyse.com
  7.  
  8. Submitted-by: rusty%grunt.Berkeley.EDU@jade.berkeley.edu
  9. Posting-number: Volume 2, Issue 4
  10. Archive-name: xtools/patch1
  11.  
  12.  
  13. #! /bin/sh
  14. # This is a shell archive.  Remove anything before this line, then unpack
  15. # it by saving it into a file and typing "sh file".  To overwrite existing
  16. # files, type "sh file -c".  You can also feed this as standard input via
  17. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  18. # will see the following message at the end:
  19. #        "End of shell archive."
  20. # Contents:  Makefile.bak README_v1.0 README_v1.1 XTools.ad
  21. #   XTools_popup.ad patch_v1.1 patchlevel.h
  22. # Wrapped by rusty@grunt on Fri Oct 14 18:23:41 1988
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. if test -f 'Makefile.bak' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'Makefile.bak'\"
  26. else
  27. echo shar: Extracting \"'Makefile.bak'\" \(4528 characters\)
  28. sed "s/^X//" >'Makefile.bak' <<'END_OF_FILE'
  29. X#
  30. X# Warning: the cpp used on this machine replaces
  31. X# all newlines and multiple tabs/spaces in a macro
  32. X# expansion with a single space.  Imake tries to
  33. X# compensate for this, but is not always
  34. X# successful.
  35. X#
  36. X
  37. X#
  38. X# This makefile is automatically generated by imake... do not modify
  39. X# or you may lose your changes when imake generates makefiles again.
  40. X# Ignore this message if you are not using imake.
  41. X#
  42. X
  43. X            TOP = ./../..
  44. X             AS = as
  45. X             CC = cc
  46. X            CPP = /lib/cpp
  47. X             LD = ld
  48. X           LINT = lint
  49. X        INSTALL = install
  50. X           TAGS = ctags
  51. X             RM = rm -f
  52. X             MV = mv
  53. X             LN = ln -s
  54. X         RANLIB = ranlib
  55. X             AR = ar clq
  56. X             LS = ls
  57. X       LINTOPTS = -axz
  58. X    LINTLIBFLAG = -C
  59. X           MAKE = make
  60. X    STD_DEFINES =
  61. X    CDEBUGFLAGS = -O
  62. X        DESTDIR =
  63. X
  64. X        PATHSEP = /
  65. X         DEPEND = $(DEPENDSRC)/makedepend
  66. X          IMAKE = $(IMAKESRC)/imake
  67. X            RGB = $(RGBSRC)/rgb
  68. X         CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
  69. X      LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
  70. X        LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
  71. X   INSTUIDFLAGS = -m 4555
  72. X   INSTLIBFLAGS = -m 0444
  73. X   INSTINCFLAGS = -m 0444
  74. X   INSTMANFLAGS = -m 0444
  75. X   INSTAPPFLAGS = -m 0444
  76. X
  77. X      USRLIBDIR = $(DESTDIR)/tuna_a/x11/lib
  78. X         BINDIR = $(DESTDIR)/tuna_a/x11/bin
  79. X         LIBDIR = $(USRLIBDIR)
  80. X     LINTLIBDIR = $(USRLIBDIR)/lint
  81. X         INCDIR = $(DESTDIR)/tuna_a/x11/include
  82. X        FONTDIR = $(LIBDIR)/fonts
  83. X         UWMDIR = $(LIBDIR)/uwm
  84. X         MANDIR = $(DESTDIR)/tuna_a/x11/man/mann
  85. X    XAPPLOADDIR = $(LIBDIR)/app-defaults
  86. X         ADMDIR = $(DESTDIR)/tuna_a/x11/adm
  87. X
  88. X      CLIENTSRC = $(TOP)/clients
  89. X        DEMOSRC = $(TOP)/demos
  90. X         LIBSRC = $(TOP)/lib
  91. X        FONTSRC = $(TOP)/fonts
  92. X     INCLUDESRC = $(TOP)/X11
  93. X      SERVERSRC = $(TOP)/server
  94. X        UTILSRC = $(TOP)/util
  95. X     EXAMPLESRC = $(TOP)/examples
  96. X     CONTRIBSRC = $(TOP)/contrib
  97. X         DOCSRC = $(TOP)/doc
  98. X      DEPENDSRC = $(UTILSRC)/makedepend
  99. X       IMAKESRC = $(UTILSRC)/imake
  100. X       IRULESRC = $(UTILSRC)/imake.includes
  101. X         RGBSRC = $(UTILSRC)/rgb
  102. X        XLIBSRC = $(LIBSRC)/X
  103. X     TOOLKITSRC = $(LIBSRC)/Xt
  104. X     AWIDGETSRC = $(LIBSRC)/Xaw
  105. X     OLDXLIBSRC = $(LIBSRC)/oldX
  106. X   EXTENSIONSRC = $(TOP)/extensions
  107. X        XMANSRC = $(DOCSRC)/Xlib/Xman
  108. X   EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
  109. X           XLIB = $(XLIBSRC)/libX11.a
  110. X        OLDXLIB = $(OLDXLIBSRC)/liboldX.a
  111. X       XTOOLLIB = $(TOOLKITSRC)/libXt.a
  112. X         XAWLIB = $(AWIDGETSRC)/libXaw.a
  113. X       LINTXLIB = $(XLIBSRC)/llib-lX11.ln
  114. X      LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
  115. X        LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
  116. X       INCLUDES = -I$(TOP)
  117. X      MACROFILE = Sun.macros
  118. X      IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl \
  119. X            -I$(NEWTOP)$(IRULESRC) \
  120. X            -s Makefile
  121. X         RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
  122. X            tags TAGS make.log
  123. X
  124. X       INCLUDES = -I$(TOP) -I$(TOP)/X11
  125. XLOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XLIB)
  126. XDEFAULT_STARTUP = $(LIBDIR)/xtools_startup
  127. X    STD_DEFINES = -DDEFAULT_STARTUP=\"$(DEFAULT_STARTUP)\" -Duse_popup
  128. X
  129. X           SRCS = top_setup.c home_setup.c quit_button.c help_button.c \
  130. X        confirm_setup.c main.c client_start.c globs.c parse.c \
  131. X        yep_button.c nope_button.c setenv.c
  132. X
  133. X           OBJS = top_setup.o home_setup.o quit_button.o help_button.o \
  134. X        confirm_setup.o main.o client_start.o globs.o parse.o \
  135. X        yep_button.o nope_button.o setenv.o
  136. X
  137. X PROGRAM = xtools
  138. X
  139. Xall:: xtools
  140. X
  141. Xxtools: $(OBJS) $(LOCAL_LIBRARIES)
  142. X    $(RM) $@
  143. X    $(CC) -o $@ $(OBJS) $(LOCAL_LIBRARIES) $(LDFLAGS)
  144. X
  145. Xrelink::
  146. X    $(RM) $(PROGRAM)
  147. X    $(MAKE) $(MFLAGS) $(PROGRAM)
  148. X
  149. Xinstall:: xtools
  150. X    $(INSTALL) -c $(INSTALLFLAGS) xtools $(BINDIR)
  151. X
  152. Xinstall:: xtools.man
  153. X    $(INSTALL) -c $(INSTMANFLAGS) xtools.man $(MANDIR)/xtools.n
  154. X
  155. Xdepend:: $(DEPEND)
  156. X
  157. Xdepend::
  158. X    $(DEPEND) -s "# DO NOT DELETE" -- $(CFLAGS) -- $(SRCS)
  159. X
  160. X$(DEPEND):
  161. X    @echo "making $(DEPENDSRC)"; \
  162. X    cd $(DEPENDSRC); $(MAKE)
  163. X
  164. Xclean::
  165. X    $(RM) $(PROGRAM)
  166. X
  167. Xinstall:: XTools.ad
  168. X    $(INSTALL) -c $(INSTAPPFLAGS) XTools.ad $(XAPPLOADDIR)/XTools
  169. X
  170. Xclean::
  171. X    $(RM_CMD) \#*
  172. X
  173. XMakefile:: $(IMAKE)
  174. X
  175. XMakefile:: Imakefile \
  176. X    $(IRULESRC)/Imake.tmpl \
  177. X    $(IRULESRC)/Imake.rules \
  178. X    $(IRULESRC)/$(MACROFILE)
  179. X    -$(RM) Makefile.bak; $(MV) Makefile Makefile.bak
  180. X    $(IMAKE_CMD) -DTOPDIR=$(TOP)
  181. X
  182. X$(IMAKE):
  183. X    @echo "making $(IMAKESRC)"; \
  184. X    cd $(IMAKESRC); $(MAKE)
  185. X
  186. Xtags::
  187. X    $(TAGS) -w *.[ch]
  188. X    $(TAGS) -xw *.[ch] > TAGS
  189. X
  190. Xinstall::
  191. X    @echo "install done"
  192. X
  193. XMakefiles::
  194. X
  195. END_OF_FILE
  196. if test 4528 -ne `wc -c <'Makefile.bak'`; then
  197.     echo shar: \"'Makefile.bak'\" unpacked with wrong size!
  198. fi
  199. # end of 'Makefile.bak'
  200. fi
  201. if test -f 'README_v1.0' -a "${1}" != "-c" ; then 
  202.   echo shar: Will not clobber existing file \"'README_v1.0'\"
  203. else
  204. echo shar: Extracting \"'README_v1.0'\" \(2937 characters\)
  205. sed "s/^X//" >'README_v1.0' <<'END_OF_FILE'
  206. XThis is my version of xtools for version 11 of the X Window System.  I
  207. Xfind it useful on my SUN because I don't like having the console
  208. Xwindow started up by xinit because if I accidently or otherwise exit
  209. Xfrom the console window then I get booted out of X.
  210. X
  211. XThere isn't a manual page yet so here's a quick description:
  212. X
  213. Xxtools reads the file ~/.xtools and executes each line.  Things that
  214. Xyou want to run in the background (pretty much everything) must have
  215. Xan ampersand (&) at the end of their lines.  Anything that you don't
  216. Xwant to run in the background (no ampersand at the end) MUST come
  217. Xfirst in your .xtools file, otherwise xtools will hang.
  218. X
  219. XHere's what my .xtools file looks like:
  220. X
  221. X
  222. Xxrdb        .xdb
  223. Xxhost        cartan yuban ovaltine bosco
  224. Xxset        m 8 8 r off c 100
  225. Xxsetroot    -gray
  226. Xtwm &
  227. Xxterm        -i -s -n cartan -T cartan #0x0-85+100 -e cartan -e &
  228. Xxterm        -i -s -n brahms -T brahms #0x0-85+135 -e brahms -e &
  229. Xxterm        -i -s -n bosco -T bosco #0x0-85+170 -e bosco -e &
  230. Xxterm        -i -s -n yuban -T yuban #0x0-85+205 -e yuban -e &
  231. Xxterm        -i -s -n ovaltine -T ovaltine #0x0-85+240 -e ovaltine -e &
  232. Xxterm        -i -s -n velveeta -T velveeta #0x0-85+275 &
  233. Xxterm        -i -C -r -s -n CONSOLE -T CONSOLE -fn screenb-12 -geo 80x24+1-1 #0x0-85+310 &
  234. Xxperfmon    =175x290-115+0 & xclock &
  235. Xxbiff &
  236. X
  237. X
  238. Xxtools was written with the Athena Widgets.  This means that you could
  239. Xload properties into the root window for it but since it is started up
  240. Xby xinit that doesn't work, but they are seen if you put them in your
  241. X.Xdefaults file.  Here's what I have in mine:
  242. X
  243. X
  244. Xxtools*geometry:                -1-100
  245. Xxtools*icon:                    on
  246. Xxtools*home.font:                vbee-36
  247. Xxtools*confirm.font:                vbee-36
  248. X
  249. X
  250. XIn addition to the regular command line options supported by the
  251. XToolkit, xtools also accepts the flag -file which should be followed
  252. Xby the name of a file which will be used instead of the ~/.xtools
  253. Xfile.  There is also a -debug flag, but I haven't used it recently and
  254. Xdon't know if it still does anything reasonable or useful.
  255. X
  256. XIMPORTANT NOTE: As with the xtools for version 10, you must either set
  257. Xthe DISPLAY environment variable before starting or specify the
  258. Xdisplay on the command line to xtools.  I have the following in my
  259. X.cshrc file:
  260. X
  261. Xset hostname = ` hostname | sed -e 's/\..*//' `
  262. Xalias x        'xinit xtools -display ${hostname}:0 ; \\
  263. X        setkeys reset ; \\
  264. X        clear'
  265. X
  266. XUnlike the version 10 xtools, this one doesn't have a menu; it just
  267. Xhas 2 buttons; "quit" and "help" (the help button is dimmed because I
  268. Xhaven't put in any code for it).  When you press the quit button
  269. Xanother window pops up for confirmation; if you press the "nope"
  270. Xbutton then you're left where you were and if you press the "yep"
  271. Xbutton then it kills off all of the windows.  Since I added the
  272. X&-at-the-end-of-the-line-feature I now get some (what appears to me to
  273. Xbe) non-serious messages when quitting.  Dunno why.
  274. X
  275. X--------------------------------------
  276. X    rusty c. wright
  277. X    rusty@cartan.berkeley.edu
  278. X    ucbvax!cartan!rusty
  279. END_OF_FILE
  280. if test 2937 -ne `wc -c <'README_v1.0'`; then
  281.     echo shar: \"'README_v1.0'\" unpacked with wrong size!
  282. fi
  283. # end of 'README_v1.0'
  284. fi
  285. if test -f 'README_v1.1' -a "${1}" != "-c" ; then 
  286.   echo shar: Will not clobber existing file \"'README_v1.1'\"
  287. else
  288. echo shar: Extracting \"'README_v1.1'\" \(834 characters\)
  289. sed "s/^X//" >'README_v1.1' <<'END_OF_FILE'
  290. XChanges from version 1.0:
  291. X
  292. XYou don't need to have -Duse_popup in the CFLAGS in the makefile any
  293. Xmore.  If you don't, it now uses the existing (xtools) window for the
  294. Xconfirmation window instead of popping up another window.  As it is
  295. Xcurrently distributed it doesn't use -Duse_popup in CFLAGS.
  296. X
  297. XLines in your .xtools file can now be in any order; you don't need to
  298. Xhave the & lines last any more.
  299. X
  300. XAll strings (labels) and whatnot are now specified by the defaults file
  301. Xlib/app-defaults/XTools.  When you install xtools be sure that the
  302. Xfile XTools.ad gets copied to lib/app-defaults/XTools.  If you use
  303. X-Duse_popup then rename XTools.ad to XTools_nopupup.ad and rename
  304. XXTools_popup.ad to XTools.ad before you do "make install".
  305. X
  306. X--------------------------------------
  307. X    rusty c. wright
  308. X    rusty@cartan.berkeley.edu
  309. X    ucbvax!cartan!rusty
  310. END_OF_FILE
  311. if test 834 -ne `wc -c <'README_v1.1'`; then
  312.     echo shar: \"'README_v1.1'\" unpacked with wrong size!
  313. fi
  314. # end of 'README_v1.1'
  315. fi
  316. if test -f 'XTools.ad' -a "${1}" != "-c" ; then 
  317.   echo shar: Will not clobber existing file \"'XTools.ad'\"
  318. else
  319. echo shar: Extracting \"'XTools.ad'\" \(625 characters\)
  320. sed "s/^X//" >'XTools.ad' <<'END_OF_FILE'
  321. Xxtools.top_shell.top_form.home_form.borderWidth:            0
  322. X
  323. Xxtools.top_shell.top_form.home_form.home_label.label:            xtools
  324. Xxtools.top_shell.top_form.home_form.home_label.borderWidth:        0
  325. X
  326. Xxtools.top_shell.top_form.home_form.quit_button.label:            quit
  327. Xxtools.top_shell.top_form.home_form.help_button.label:            help
  328. X
  329. Xxtools.top_shell.top_form.confirm_form.borderWidth:            0
  330. X
  331. Xxtools.top_shell.top_form.confirm_form.confirm_label.label:        REALLY?
  332. Xxtools.top_shell.top_form.confirm_form.confirm_label.borderWidth:    0
  333. X
  334. Xxtools.top_shell.top_form.confirm_form.yes_button.label:        yes
  335. Xxtools.top_shell.top_form.confirm_form.no_button.label:            no
  336. X
  337. END_OF_FILE
  338. if test 625 -ne `wc -c <'XTools.ad'`; then
  339.     echo shar: \"'XTools.ad'\" unpacked with wrong size!
  340. fi
  341. # end of 'XTools.ad'
  342. fi
  343. if test -f 'XTools_popup.ad' -a "${1}" != "-c" ; then 
  344.   echo shar: Will not clobber existing file \"'XTools_popup.ad'\"
  345. else
  346. echo shar: Extracting \"'XTools_popup.ad'\" \(695 characters\)
  347. sed "s/^X//" >'XTools_popup.ad' <<'END_OF_FILE'
  348. Xxtools.top_shell.top_form.home_form.borderWidth:            0
  349. X
  350. Xxtools.top_shell.top_form.home_form.home_label.label:            xtools
  351. Xxtools.top_shell.top_form.home_form.home_label.borderWidth:        0
  352. X
  353. Xxtools.top_shell.top_form.home_form.quit_button.label:            quit
  354. Xxtools.top_shell.top_form.home_form.help_button.label:            help
  355. X
  356. Xxtools.top_shell.top_form.confirm_shell.confirm_form.borderWidth:            0
  357. X
  358. Xxtools.top_shell.top_form.confirm_shell.confirm_form.confirm_label.label:        REALLY?
  359. Xxtools.top_shell.top_form.confirm_shell.confirm_form.confirm_label.borderWidth:    0
  360. X
  361. Xxtools.top_shell.top_form.confirm_shell.confirm_form.yes_button.label:        yes
  362. Xxtools.top_shell.top_form.confirm_shell.confirm_form.no_button.label:            no
  363. X
  364. END_OF_FILE
  365. if test 695 -ne `wc -c <'XTools_popup.ad'`; then
  366.     echo shar: \"'XTools_popup.ad'\" unpacked with wrong size!
  367. fi
  368. # end of 'XTools_popup.ad'
  369. fi
  370. if test -f 'patch_v1.1' -a "${1}" != "-c" ; then 
  371.   echo shar: Will not clobber existing file \"'patch_v1.1'\"
  372. else
  373. echo shar: Extracting \"'patch_v1.1'\" \(18990 characters\)
  374. sed "s/^X//" >'patch_v1.1' <<'END_OF_FILE'
  375. Xdiff -r -c xtools_old/Imakefile xtools/Imakefile
  376. X*** xtools_old/Imakefile    Thu Sep 29 14:17:07 1988
  377. X--- xtools/Imakefile    Thu Sep 29 14:41:58 1988
  378. X***************
  379. X*** 1,14 ****
  380. X         INCLUDES = -I$(TOP) -I$(TOP)/X11
  381. X  LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XLIB)
  382. X  DEFAULT_STARTUP = $(LIBDIR)/xtools_startup
  383. X!     STD_DEFINES = -DDEFAULT_STARTUP=\"$(DEFAULT_STARTUP)\" -Duse_popup
  384. X  
  385. X!        SRCS = top_setup.c home_setup.c quit_button.c help_button.c \
  386. X!         confirm_setup.c main.c client_start.c globs.c parse.c \
  387. X!         yep_button.c nope_button.c setenv.c
  388. X  
  389. X!        OBJS = top_setup.o home_setup.o quit_button.o help_button.o \
  390. X!         confirm_setup.o main.o client_start.o globs.o parse.o \
  391. X!         yep_button.o nope_button.o setenv.o
  392. X  
  393. X  ComplexProgramTarget(xtools)
  394. X--- 1,15 ----
  395. X         INCLUDES = -I$(TOP) -I$(TOP)/X11
  396. X  LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XLIB)
  397. X  DEFAULT_STARTUP = $(LIBDIR)/xtools_startup
  398. X!     STD_DEFINES = -DDEFAULT_STARTUP=\"$(DEFAULT_STARTUP)\"
  399. X  
  400. X!            SRCS = top_setup.c home_setup.c quit_button.c help_button.c \
  401. X!                   confirm_setup.c main.c client_start.c globs.c parse.c \
  402. X!                   yep_button.c nope_button.c setenv.c
  403. X  
  404. X!            OBJS = top_setup.o home_setup.o quit_button.o help_button.o \
  405. X!                   confirm_setup.o main.o client_start.o globs.o parse.o \
  406. X!                   yep_button.o nope_button.o setenv.o
  407. X  
  408. X  ComplexProgramTarget(xtools)
  409. X+ InstallAppDefaults(XTools)
  410. XOnly in xtools: Makefile
  411. XOnly in xtools: README
  412. XOnly in xtools: SCCS
  413. XOnly in xtools: XTools.ad
  414. XOnly in xtools: XTools_popup.ad
  415. Xdiff -r -c xtools_old/client_start.c xtools/client_start.c
  416. X*** xtools_old/client_start.c    Thu Sep 29 14:17:03 1988
  417. X--- xtools/client_start.c    Thu Sep 22 22:37:05 1988
  418. X***************
  419. X*** 1,6 ****
  420. X--- 1,9 ----
  421. X+ /* %A% Workstation Software Support %G% */
  422. X+ 
  423. X  # include <X11/Intrinsic.h>
  424. X  # include <sys/wait.h>
  425. X  # include <sys/file.h>
  426. X+ # include <setjmp.h>
  427. X  # include <signal.h>
  428. X  # include <fcntl.h>
  429. X  # include <pwd.h>
  430. X***************
  431. X*** 8,13 ****
  432. X--- 11,18 ----
  433. X  
  434. X  # include "globs.h"
  435. X  
  436. X+ static jmp_buf    env;
  437. X+ 
  438. X  static int    pids[128];
  439. X  static int    npids;
  440. X  static int    dohang;
  441. X***************
  442. X*** 17,24 ****
  443. X   */
  444. X  client_start() {
  445. X      extern char    *index();
  446. X!     extern void    shutdown();
  447. X!     extern void    cleanup();
  448. X      extern char    *getname();
  449. X      extern char    *getline();
  450. X      FILE        *fd;
  451. X--- 22,29 ----
  452. X   */
  453. X  client_start() {
  454. X      extern char    *index();
  455. X!     extern void    fn_sigint();
  456. X!     extern void    fn_sigchld();
  457. X      extern char    *getname();
  458. X      extern char    *getline();
  459. X      FILE        *fd;
  460. X***************
  461. X*** 49,65 ****
  462. X          return(-1);
  463. X      }
  464. X  
  465. X!     (void) signal(SIGINT, (int (*)()) shutdown);
  466. X!     (void) signal(SIGCHLD, (int (*)()) cleanup);
  467. X  
  468. X      while ((cp = getline(fd)) != NULL) {
  469. X          if (execute(cp) == -1)
  470. X              (void) fprintf(stderr, "can't execute \"%s\"\n", cp);
  471. X      }
  472. X-     dohang = 0;
  473. X  
  474. X      fclose(fd);
  475. X  
  476. X      return(0);
  477. X  }
  478. X  
  479. X--- 54,71 ----
  480. X          return(-1);
  481. X      }
  482. X  
  483. X!     (void) signal(SIGINT, (int (*)()) fn_sigint);
  484. X!     (void) signal(SIGCHLD, (int (*)()) fn_sigchld);
  485. X  
  486. X      while ((cp = getline(fd)) != NULL) {
  487. X          if (execute(cp) == -1)
  488. X              (void) fprintf(stderr, "can't execute \"%s\"\n", cp);
  489. X      }
  490. X  
  491. X      fclose(fd);
  492. X  
  493. X+     dohang = 0;
  494. X+ 
  495. X      return(0);
  496. X  }
  497. X  
  498. X***************
  499. X*** 131,138 ****
  500. X--- 137,146 ----
  501. X      char        *line;
  502. X  {
  503. X      extern char    **getargs();
  504. X+     extern void    cleanup();
  505. X      extern void    checkamp();
  506. X      char        **args;
  507. X+     int        omask;
  508. X      int        pid;
  509. X      int        i;
  510. X  
  511. X***************
  512. X*** 139,146 ****
  513. X      if ((args = getargs(line)) == NULL)
  514. X          return(-1);
  515. X  
  516. X-     checkamp(args);
  517. X- 
  518. X      if (debug) {
  519. X          (void) printf("execvp(\"%s\"", args[0]);
  520. X          for (i = 1; args[i] != NULL; i++)
  521. X--- 147,152 ----
  522. X***************
  523. X*** 149,155 ****
  524. X          return(0);
  525. X      }
  526. X  
  527. X!     if ((pid = fork()) == 0) {
  528. X          if (setpgrp(0, getpid()) == -1)
  529. X              perror("setpgrp(0)");
  530. X  
  531. X--- 155,167 ----
  532. X          return(0);
  533. X      }
  534. X  
  535. X!     checkamp(args);
  536. X! 
  537. X!     /* block sigchld signals until we arm setjmp/longjmp */
  538. X!     if (dohang)
  539. X!         omask = sigblock(sigmask(SIGCHLD));
  540. X! 
  541. X!     if ((pid = vfork()) == 0) {
  542. X          if (setpgrp(0, getpid()) == -1)
  543. X              perror("setpgrp(0)");
  544. X  
  545. X***************
  546. X*** 178,184 ****
  547. X      else    /* pid == -1, fork failed */
  548. X          return(-1);
  549. X  
  550. X!     cleanup();
  551. X  
  552. X      return(0);
  553. X  }
  554. X--- 190,196 ----
  555. X      else    /* pid == -1, fork failed */
  556. X          return(-1);
  557. X  
  558. X!     cleanup(pid, omask);
  559. X  
  560. X      return(0);
  561. X  }
  562. X***************
  563. X*** 204,209 ****
  564. X--- 216,222 ----
  565. X      i--;    /* back up to last non-NULL arg */
  566. X  
  567. X      cp = args[i];
  568. X+ 
  569. X      if (strcmp(cp, "&") == 0) {
  570. X          args[i] = NULL;
  571. X          dohang = 0;
  572. X***************
  573. X*** 218,230 ****
  574. X  int    sigs[] = { SIGTERM /* , SIGHUP, SIGKILL */ };
  575. X  
  576. X  /*
  577. X!  * shutdown is called when quitting.  it kills all outstanding
  578. X   * processes.
  579. X   */
  580. X  static void
  581. X! shutdown() {
  582. X      int        i, j;
  583. X  
  584. X      for (j = 0; j < SIGS; j++) {
  585. X          for (i = 0; i < npids; i++) {
  586. X              if (pids[i] == 0)
  587. X--- 231,248 ----
  588. X  int    sigs[] = { SIGTERM /* , SIGHUP, SIGKILL */ };
  589. X  
  590. X  /*
  591. X!  * fn_sigint is called when quitting.  it kills all outstanding
  592. X   * processes.
  593. X   */
  594. X  static void
  595. X! fn_sigint() {
  596. X!     extern void    fn_sigint();
  597. X      int        i, j;
  598. X  
  599. X+     (void) signal(SIGINT, (int (*)()) fn_sigint);
  600. X+ 
  601. X+     dohang = 0;
  602. X+ 
  603. X      for (j = 0; j < SIGS; j++) {
  604. X          for (i = 0; i < npids; i++) {
  605. X              if (pids[i] == 0)
  606. X***************
  607. X*** 243,256 ****
  608. X                  if (debug)
  609. X                      (void) printf("can't kill pid %d\n",
  610. X                                pids[i]);
  611. X                  continue;
  612. X              }
  613. X          }
  614. X      }
  615. X  
  616. X-     dohang = 0;
  617. X-     cleanup();
  618. X- 
  619. X      exit(0);
  620. X  }
  621. X  
  622. X--- 261,272 ----
  623. X                  if (debug)
  624. X                      (void) printf("can't kill pid %d\n",
  625. X                                pids[i]);
  626. X+ 
  627. X                  continue;
  628. X              }
  629. X          }
  630. X      }
  631. X  
  632. X      exit(0);
  633. X  }
  634. X  
  635. X***************
  636. X*** 258,272 ****
  637. X   * cleanup collectes dead children.
  638. X   */
  639. X  static void
  640. X! cleanup() {
  641. X      union wait    status;
  642. X-     int        options;
  643. X      int        pid;
  644. X      int        i;
  645. X  
  646. X!     options = (dohang == 1) ? 0 : WNOHANG;
  647. X  
  648. X!     while ((pid = wait3(&status, options, (struct rusage *) NULL)) > 0) {
  649. X          for (i = 0; i < npids; i++) {
  650. X              if (pids[i] == pid) {
  651. X                  if (debug)
  652. X--- 274,304 ----
  653. X   * cleanup collectes dead children.
  654. X   */
  655. X  static void
  656. X! cleanup(pid, omask) {
  657. X!     int        val;
  658. X! 
  659. X!     if (dohang && (pid != 0)) {
  660. X!         while ((val = setjmp(env)) != pid) {
  661. X!             /*
  662. X!              * if val is 0 then we've armed setjmp/longjmp
  663. X!              * so unblock sigchld signals.
  664. X!              */
  665. X!             if (val == 0)
  666. X!                 (void) sigsetmask(omask);
  667. X!         }
  668. X!     }
  669. X! }
  670. X! 
  671. X! static void
  672. X! fn_sigchld() {
  673. X!     extern void    fn_sigchld();
  674. X      union wait    status;
  675. X      int        pid;
  676. X      int        i;
  677. X  
  678. X!     (void) signal(SIGCHLD, (int (*)()) fn_sigchld);
  679. X  
  680. X!     if ((pid = wait3(&status, WNOHANG, (struct rusage *) NULL)) > 0) {
  681. X          for (i = 0; i < npids; i++) {
  682. X              if (pids[i] == pid) {
  683. X                  if (debug)
  684. X***************
  685. X*** 280,286 ****
  686. X          while (pids[npids-1] == 0) {
  687. X              npids--;
  688. X              if (npids == 0)
  689. X!                 return;
  690. X          }
  691. X      }
  692. X  }
  693. X--- 312,321 ----
  694. X          while (pids[npids-1] == 0) {
  695. X              npids--;
  696. X              if (npids == 0)
  697. X!                 break;
  698. X          }
  699. X+ 
  700. X+         if (dohang)
  701. X+             longjmp(env, pid);
  702. X      }
  703. X  }
  704. Xdiff -r -c xtools_old/confirm_setup.c xtools/confirm_setup.c
  705. X*** xtools_old/confirm_setup.c    Thu Sep 29 14:17:01 1988
  706. X--- xtools/confirm_setup.c    Thu Sep 29 13:47:59 1988
  707. X***************
  708. X*** 22,36 ****
  709. X  static int confirm_popup_args_n = XtNumber(confirm_popup_args);
  710. X  # endif /* use_popup */
  711. X  
  712. X- static char label_text[] = "REALLY QUIT?";
  713. X- 
  714. X- static Arg label_args[] = {
  715. X-     { XtNlabel,        (XtArgVal) label_text },
  716. X-     { XtNborderWidth,    (XtArgVal) 0 },
  717. X- };
  718. X- 
  719. X- static int label_args_n = XtNumber(label_args);
  720. X- 
  721. X  Widget
  722. X  confirm_setup(parent, home_form)
  723. X      Widget        parent;
  724. X--- 22,27 ----
  725. X***************
  726. X*** 49,81 ****
  727. X           DisplayHeight(XtDisplay(parent),
  728. X                    XDefaultScreen(XtDisplay(parent)))/2);
  729. X  
  730. X!     confirm_popup = XtCreatePopupShell("confirm",
  731. X                         transientShellWidgetClass, parent,
  732. X                         confirm_popup_args,
  733. X                         confirm_popup_args_n);
  734. X  
  735. X!     confirm_form = XtCreateManagedWidget("confirm", formWidgetClass,
  736. X                           confirm_popup, NULL, 0);
  737. X! # else /* use_popup */
  738. X!     confirm_form = XtCreateWidget("confirm", formWidgetClass,
  739. X!                          parent, NULL, 0);
  740. X  # endif /* use_popup */
  741. X  
  742. X! /*    XtSetArg(label_args[2], XtNfont, query_font); */
  743. X!     label_widget = XtCreateManagedWidget("confirm", labelWidgetClass,
  744. X!                          confirm_form, label_args,
  745. X!                          label_args_n);
  746. X  
  747. X!     yep_button = XtCreateManagedWidget("yep", commandWidgetClass,
  748. X!                        confirm_form, yep_button_args,
  749. X!                        yep_button_args_n);
  750. X      XtSetArg(args[0], XtNfromVert, label_widget);
  751. X      XtSetValues(yep_button, args, 1);
  752. X      XtAddCallback(yep_button, XtNcallback, yep_func, (caddr_t) parent);
  753. X  
  754. X!     nope_button = XtCreateManagedWidget("nope", commandWidgetClass,
  755. X!                         confirm_form, nope_button_args,
  756. X!                         nope_button_args_n);
  757. X      XtSetArg(args[0], XtNfromVert, label_widget);
  758. X      XtSetValues(nope_button, args, 1);
  759. X      XtSetArg(args[0], XtNfromHoriz, yep_button);
  760. X--- 40,68 ----
  761. X           DisplayHeight(XtDisplay(parent),
  762. X                    XDefaultScreen(XtDisplay(parent)))/2);
  763. X  
  764. X!     confirm_popup = XtCreatePopupShell("confirm_shell",
  765. X                         transientShellWidgetClass, parent,
  766. X                         confirm_popup_args,
  767. X                         confirm_popup_args_n);
  768. X  
  769. X!     confirm_form = XtCreateManagedWidget("confirm_form", formWidgetClass,
  770. X                           confirm_popup, NULL, 0);
  771. X! # else /* not use_popup */
  772. X!     confirm_form = XtCreateWidget("confirm_form", formWidgetClass, parent,
  773. X!                       NULL, 0);
  774. X  # endif /* use_popup */
  775. X  
  776. X!     label_widget = XtCreateManagedWidget("confirm_label", labelWidgetClass,
  777. X!                          confirm_form, NULL, 0);
  778. X  
  779. X!     yep_button = XtCreateManagedWidget("yes_button", commandWidgetClass,
  780. X!                        confirm_form, NULL, 0);
  781. X      XtSetArg(args[0], XtNfromVert, label_widget);
  782. X      XtSetValues(yep_button, args, 1);
  783. X      XtAddCallback(yep_button, XtNcallback, yep_func, (caddr_t) parent);
  784. X  
  785. X!     nope_button = XtCreateManagedWidget("no_button", commandWidgetClass,
  786. X!                         confirm_form, NULL, 0);
  787. X      XtSetArg(args[0], XtNfromVert, label_widget);
  788. X      XtSetValues(nope_button, args, 1);
  789. X      XtSetArg(args[0], XtNfromHoriz, yep_button);
  790. X***************
  791. X*** 85,90 ****
  792. X--- 72,79 ----
  793. X  
  794. X  # ifdef use_popup
  795. X      XtRealizeWidget(confirm_popup);
  796. X+ # else /* use_popup */
  797. X+     XtRealizeWidget(confirm_form);
  798. X  # endif /* use_popup */
  799. X  
  800. X      return(confirm_form);
  801. Xdiff -r -c xtools_old/help_button.c xtools/help_button.c
  802. X*** xtools_old/help_button.c    Thu Sep 29 14:17:01 1988
  803. X--- xtools/help_button.c    Thu Sep 29 15:09:21 1988
  804. X***************
  805. X*** 5,19 ****
  806. X  
  807. X  # include "home_globs.h"
  808. X  
  809. X- static char    help_button_label[] = "help";
  810. X- 
  811. X- Arg help_button_args[] = {
  812. X-     { XtNlabel,        (XtArgVal) help_button_label },
  813. X-     { XtNsensitive,        (XtArgVal) False },
  814. X- };
  815. X- 
  816. X- int help_button_args_n = XtNumber(help_button_args);
  817. X- 
  818. X  void
  819. X  help_func(w, client_data, call_data)
  820. X      Widget        w;
  821. X--- 5,10 ----
  822. Xdiff -r -c xtools_old/home_setup.c xtools/home_setup.c
  823. X*** xtools_old/home_setup.c    Thu Sep 29 14:17:00 1988
  824. X--- xtools/home_setup.c    Thu Sep 29 15:09:15 1988
  825. X***************
  826. X*** 6,20 ****
  827. X  
  828. X  # include "home_globs.h"
  829. X  
  830. X- static char label_text[] = "xtools";
  831. X- 
  832. X- static Arg label_args[] = {
  833. X-     { XtNlabel,        (XtArgVal) label_text },
  834. X-     { XtNborderWidth,    (XtArgVal) 0 },
  835. X- };
  836. X- 
  837. X- static int label_args_n = XtNumber(label_args);
  838. X- 
  839. X  Widget        quit_button;
  840. X  
  841. X  Widget
  842. X--- 6,11 ----
  843. X***************
  844. X*** 26,52 ****
  845. X      Widget        help_button;
  846. X      Arg        args[1];
  847. X  
  848. X!     home_form = XtCreateWidget("home", formWidgetClass, parent,
  849. X                     NULL, 0);
  850. X  
  851. X!     label_widget = XtCreateManagedWidget("home", labelWidgetClass,
  852. X!                          home_form, label_args,
  853. X!                          label_args_n);
  854. X  
  855. X!     quit_button = XtCreateManagedWidget("quit", commandWidgetClass,
  856. X!                         home_form, quit_button_args,
  857. X!                         quit_button_args_n);
  858. X      XtSetArg(args[0], XtNfromVert, label_widget);
  859. X      XtSetValues(quit_button, args, 1);
  860. X      XtAddCallback(quit_button, XtNcallback, quit_func,
  861. X                (caddr_t) home_form);
  862. X  
  863. X!     help_button = XtCreateManagedWidget("help", commandWidgetClass,
  864. X!                         home_form, help_button_args,
  865. X!                         help_button_args_n);
  866. X      XtSetArg(args[0], XtNfromHoriz, quit_button);
  867. X      XtSetValues(help_button, args, 1);
  868. X      XtSetArg(args[0], XtNfromVert, label_widget);
  869. X      XtSetValues(help_button, args, 1);
  870. X      XtAddCallback(help_button, XtNcallback, help_func,
  871. X                (caddr_t) home_form);
  872. X--- 17,42 ----
  873. X      Widget        help_button;
  874. X      Arg        args[1];
  875. X  
  876. X!     home_form = XtCreateWidget("home_form", formWidgetClass, parent,
  877. X                     NULL, 0);
  878. X  
  879. X!     label_widget = XtCreateManagedWidget("home_label", labelWidgetClass,
  880. X!                          home_form, NULL, 0);
  881. X  
  882. X!     quit_button = XtCreateManagedWidget("quit_button", commandWidgetClass,
  883. X!                         home_form, NULL, 0);
  884. X      XtSetArg(args[0], XtNfromVert, label_widget);
  885. X      XtSetValues(quit_button, args, 1);
  886. X      XtAddCallback(quit_button, XtNcallback, quit_func,
  887. X                (caddr_t) home_form);
  888. X  
  889. X!     help_button = XtCreateManagedWidget("help_button", commandWidgetClass,
  890. X!                         home_form, NULL, 0);
  891. X      XtSetArg(args[0], XtNfromHoriz, quit_button);
  892. X      XtSetValues(help_button, args, 1);
  893. X      XtSetArg(args[0], XtNfromVert, label_widget);
  894. X+     XtSetValues(help_button, args, 1);
  895. X+     XtSetArg(args[0], XtNsensitive, False);
  896. X      XtSetValues(help_button, args, 1);
  897. X      XtAddCallback(help_button, XtNcallback, help_func,
  898. X                (caddr_t) home_form);
  899. Xdiff -r -c xtools_old/nope_button.c xtools/nope_button.c
  900. X*** xtools_old/nope_button.c    Thu Sep 29 14:17:04 1988
  901. X--- xtools/nope_button.c    Thu Sep 29 13:31:16 1988
  902. X***************
  903. X*** 6,19 ****
  904. X  # include "home_globs.h"
  905. X  # include "confirm_globs.h"
  906. X  
  907. X- static char    nope_button_label[] = "nope";
  908. X- 
  909. X- Arg nope_button_args[] = {
  910. X-     { XtNlabel,        (XtArgVal) nope_button_label }
  911. X- };
  912. X- 
  913. X- int nope_button_args_n = XtNumber(nope_button_args);
  914. X- 
  915. X  void
  916. X  nope_func(w, client_data, call_data)
  917. X      Widget        w;
  918. X--- 6,11 ----
  919. X***************
  920. X*** 22,30 ****
  921. X  {
  922. X  # ifdef use_popup
  923. X      XtPopdown(confirm_popup);
  924. X-     XtSetSensitive(quit_button, True);
  925. X  # else /* use_popup */
  926. X      XtUnmanageChild(confirm_form);
  927. X      XtManageChild((Widget) client_data);
  928. X  # endif /* use_popup */
  929. X  }
  930. X--- 14,22 ----
  931. X  {
  932. X  # ifdef use_popup
  933. X      XtPopdown(confirm_popup);
  934. X  # else /* use_popup */
  935. X      XtUnmanageChild(confirm_form);
  936. X      XtManageChild((Widget) client_data);
  937. X  # endif /* use_popup */
  938. X+     XtSetSensitive(quit_button, True);
  939. X  }
  940. XOnly in xtools: notes
  941. Xdiff -r -c xtools_old/quit_button.c xtools/quit_button.c
  942. X*** xtools_old/quit_button.c    Thu Sep 29 14:17:00 1988
  943. X--- xtools/quit_button.c    Thu Sep 29 13:35:31 1988
  944. X***************
  945. X*** 5,18 ****
  946. X  # include "home_globs.h"
  947. X  # include "confirm_globs.h"
  948. X  
  949. X- static char    quit_button_label[] = "quit";
  950. X- 
  951. X- Arg quit_button_args[] = {
  952. X-     { XtNlabel,        (XtArgVal) quit_button_label }
  953. X- };
  954. X- 
  955. X- int quit_button_args_n = XtNumber(quit_button_args);
  956. X- 
  957. X  void
  958. X  quit_func(w, client_data, call_data)
  959. X      Widget        w;
  960. X--- 5,10 ----
  961. XOnly in xtools: resources
  962. Xdiff -r -c xtools_old/top_setup.c xtools/top_setup.c
  963. X*** xtools_old/top_setup.c    Thu Sep 29 14:16:59 1988
  964. X--- xtools/top_setup.c    Thu Sep 29 13:53:37 1988
  965. X***************
  966. X*** 14,28 ****
  967. X  static Widget        top_shell;
  968. X  
  969. X  static XrmOptionDescRec options[] = {
  970. X!     { "-file",    "file",        XrmoptionSepArg,    NULL },
  971. X!     { "-debug",    "debug",    XrmoptionIsArg,        "False" },
  972. X  };
  973. X  
  974. X  static XtResource    resources[] = {
  975. X      { "file", "file", XtRString, sizeof(char *), (Cardinal) &file,
  976. X!           XtRString, NULL },
  977. X      { "debug", "debug", XtRBoolean, sizeof(Boolean), (Cardinal) &debug,
  978. X!           XtRBoolean, 0 },
  979. X  };
  980. X  
  981. X  Widget
  982. X--- 14,31 ----
  983. X  static Widget        top_shell;
  984. X  
  985. X  static XrmOptionDescRec options[] = {
  986. X! { "-file",    "file",        XrmoptionSepArg,    (caddr_t) NULL },
  987. X! { "-debug",    "debug",    XrmoptionIsArg,        (caddr_t) "False" },
  988. X! # ifdef unix    /* THIS DOESN'T WORK */
  989. X! { "-display",    "*display",    XrmoptionSepArg,    (caddr_t) "unix:0" },
  990. X! # endif unix
  991. X  };
  992. X  
  993. X  static XtResource    resources[] = {
  994. X      { "file", "file", XtRString, sizeof(char *), (Cardinal) &file,
  995. X!           XtRString, (caddr_t) NULL },
  996. X      { "debug", "debug", XtRBoolean, sizeof(Boolean), (Cardinal) &debug,
  997. X!           XtRBoolean, (caddr_t) NULL },
  998. X  };
  999. X  
  1000. X  Widget
  1001. X***************
  1002. X*** 33,39 ****
  1003. X      Widget        top_form;
  1004. X      Arg        args[1];
  1005. X  
  1006. X!     top_shell = XtInitialize("top", "XTools", options,
  1007. X                   XtNumber(options), &argc, argv );
  1008. X      if (argc != 1)
  1009. X          usage();
  1010. X--- 36,42 ----
  1011. X      Widget        top_form;
  1012. X      Arg        args[1];
  1013. X  
  1014. X!     top_shell = XtInitialize("top_shell", "XTools", options,
  1015. X                   XtNumber(options), &argc, argv );
  1016. X      if (argc != 1)
  1017. X          usage();
  1018. X***************
  1019. X*** 54,61 ****
  1020. X  # ifdef use_popup
  1021. X      top_form = top_shell;
  1022. X  # else /* use_popup */
  1023. X!     top_form = XtCreateManagedWidget("top", formWidgetClass, top_shell,
  1024. X!                   NULL, 0);
  1025. X  
  1026. X      XtSetArg(args[0], XtNallowShellResize, True);
  1027. X      XtSetValues(top_form, args, 1);
  1028. X--- 57,64 ----
  1029. X  # ifdef use_popup
  1030. X      top_form = top_shell;
  1031. X  # else /* use_popup */
  1032. X!     top_form = XtCreateManagedWidget("top_form", formWidgetClass,
  1033. X!                      top_shell, NULL, 0);
  1034. X  
  1035. X      XtSetArg(args[0], XtNallowShellResize, True);
  1036. X      XtSetValues(top_form, args, 1);
  1037. Xdiff -r -c xtools_old/xtools.man xtools/xtools.man
  1038. X*** xtools_old/xtools.man    Thu Sep 29 14:17:09 1988
  1039. X--- xtools/xtools.man    Mon Aug 15 15:16:10 1988
  1040. X***************
  1041. X*** 33,44 ****
  1042. X  If none of the .xtools files with a machine or domain name exist then
  1043. X  it uses just ``.xtools''.
  1044. X  .SH CONFIGURATION FILE FORMAT
  1045. X! The format of the .xtools file is the same as if you were typing the
  1046. X! commands to the shell.  (But note that csh-style tilde expansion is
  1047. X! not implemented.)  In particular, it is important to note that the
  1048. X! command lines in the .xtools file must have an ampersand (&) at the
  1049. X! end if the command is expected to run in the background (for example,
  1050. X! xterm).  A bug in
  1051. X  .I xtools
  1052. X  requires you to put all of those commands that don't run in the
  1053. X  background first.  Here is a sample .xtools file
  1054. X--- 33,45 ----
  1055. X  If none of the .xtools files with a machine or domain name exist then
  1056. X  it uses just ``.xtools''.
  1057. X  .SH CONFIGURATION FILE FORMAT
  1058. X! The format of the .xtools file is similar to typing the commands to
  1059. X! the shell.  Notable differences are that csh-style tilde expansion is
  1060. X! not implemented, quotes don't work, input and output redirection
  1061. X! doesn't work; in other words, no shell metacharacters are recognized.
  1062. X! In particular, it is important to note that the command lines in the
  1063. X! .xtools file must have an ampersand (&) at the end if the command is
  1064. X! expected to run in the background (for example, xterm).  A bug in
  1065. X  .I xtools
  1066. X  requires you to put all of those commands that don't run in the
  1067. X  background first.  Here is a sample .xtools file
  1068. Xdiff -r -c xtools_old/yep_button.c xtools/yep_button.c
  1069. X*** xtools_old/yep_button.c    Thu Sep 29 14:17:04 1988
  1070. X--- xtools/yep_button.c    Thu Sep 29 13:32:19 1988
  1071. X***************
  1072. X*** 3,17 ****
  1073. X  # include <X11/Form.h>
  1074. X  # include <stdio.h>
  1075. X  
  1076. X- static char    yep_button_label[] = "yep";
  1077. X- 
  1078. X- Arg yep_button_args[] = {
  1079. X-     { XtNfromVert,        (XtArgVal) NULL },
  1080. X-     { XtNlabel,        (XtArgVal) yep_button_label }
  1081. X- };
  1082. X- 
  1083. X- int yep_button_args_n = XtNumber(yep_button_args);
  1084. X- 
  1085. X  void
  1086. X  yep_func(w, client_data, call_data)
  1087. X      Widget        w;
  1088. X--- 3,8 ----
  1089. END_OF_FILE
  1090. if test 18990 -ne `wc -c <'patch_v1.1'`; then
  1091.     echo shar: \"'patch_v1.1'\" unpacked with wrong size!
  1092. fi
  1093. # end of 'patch_v1.1'
  1094. fi
  1095. if test -f 'patchlevel.h' -a "${1}" != "-c" ; then 
  1096.   echo shar: Will not clobber existing file \"'patchlevel.h'\"
  1097. else
  1098. echo shar: Extracting \"'patchlevel.h'\" \(4 characters\)
  1099. sed "s/^X//" >'patchlevel.h' <<'END_OF_FILE'
  1100. X1.1
  1101. END_OF_FILE
  1102. if test 4 -ne `wc -c <'patchlevel.h'`; then
  1103.     echo shar: \"'patchlevel.h'\" unpacked with wrong size!
  1104. fi
  1105. # end of 'patchlevel.h'
  1106. fi
  1107. echo shar: End of shell archive.
  1108. exit 0
  1109. -- 
  1110. Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330
  1111. Moderator of comp.sources.x
  1112.